package com.ruoyi.basicsystem.service;

import java.math.BigDecimal;
import java.util.List;
import java.util.Map;

import com.ruoyi.basicsystem.domain.AccountHeadVo4ListEx;
import com.ruoyi.basicsystem.domain.AccountVo4InOutList;
import com.ruoyi.basicsystem.domain.AccountVo4List;
import com.ruoyi.basicsystem.domain.ZnAccount;

import javax.servlet.http.HttpServletRequest;

/**
 * 结算账号Service接口
 * 
 * @author nexiaozi
 * @date 2022-02-21
 */
public interface IZnAccountService 
{
    /**
     * 查询结算账号
     * 
     * @param id 结算账号主键
     * @return 结算账号
     */
    public ZnAccount selectZnAccountById(Long id);

    /**
     * 查询结算账号列表
     * 
     * @param znAccount 结算账号
     * @return 结算账号集合
     */
    public List<ZnAccount> selectZnAccountList(ZnAccount znAccount);
     /**
      * 查询结算账号记录数
      *
      * @param znAccount 结算账号
      * @return 结算账号记录数
     */
    public Integer selectZnAccountCount(ZnAccount znAccount);

    /**
     * 新增结算账号
     * 
     * @param znAccount 结算账号
     * @return 结果
     */
    public int insertZnAccount(ZnAccount znAccount);

    /**
     * 修改结算账号
     * 
     * @param znAccount 结算账号
     * @return 结果
     */
    public int updateZnAccount(ZnAccount znAccount);

    /**
     * 批量删除结算账号
     * 
     * @param ids 需要删除的结算账号主键集合
     * @return 结果
     */
    public int deleteZnAccountByIds(Long[] ids);

    /**
     * 删除结算账号信息
     * 
     * @param id 结算账号主键
     * @return 结果
     */
    public int deleteZnAccountById(Long id);
    /**
     * 设置为默认结算账号
     *
     * @param id 结算账号主键
     * @return 结果
     */
    public int setDefault(Long id);

    Map<String, Object> getStatistics(ZnAccount znAccount);

    /**
     * 单个账户的金额求和-入库和出库
     *
     * @param id
     * @return
     */
    public BigDecimal getAccountSum(Long id, String timeStr, String type) throws Exception;
    /**
     * 单个账户的金额求和-收入、支出、转账的单据表头的合计
     *
     * @param id
     * @return
     */
    public BigDecimal getAccountSumByHead(Long id, String timeStr, String type) throws Exception;

    /**
     * 单个账户的金额求和-收款、付款、转账、收预付款的单据明细的合计
     *
     * @param id
     * @return
     */
    public BigDecimal getAccountSumByDetail(Long id, String timeStr, String type) throws Exception;
    /**
     * 单个账户的金额求和-多账户的明细合计
     *
     * @param id
     * @return
     */
    public BigDecimal getManyAccountSum(Long id, String timeStr, String type) throws Exception;

    List<AccountVo4InOutList> findAccountInOutList(Long accountId);

    Map<Long, String> getAccountMap();

    String getAccountStrByIdAndMoney(Map<Long, String> accountMap, String accountIdList, String accountMoneyList);

    AccountHeadVo4ListEx selectZnAccountDetailByBillNo(String billNo);

    List<AccountVo4List> selectZnAccountVo4List(ZnAccount znAccount);

    List<AccountVo4InOutList> findAccountInOutList(Long accountId, Map<String,Object> paramMap);
}

